home *** CD-ROM | disk | FTP | other *** search
/ MacGames Sampler / PHT MacGames Bundle.iso / MacSource Folder / Samples from the CD / Assembly / Mac68k / XAMP.S / CYEDS.S next >
Encoding:
Text File  |  1985-08-22  |  21.6 KB  |  960 lines  |  [TEXT/Anon]

  1. EDIT     SUBTTL     FULL SCREEN TEXT EDITOR.
  2. EDIT     SPACE     4,10
  3. **       EDIT - EDIT A TEXT FILE.
  4. *
  5. *     ENTRY     A0/D0 - FILE NAME.
  6.  
  7.  
  8. EDIT     TST.B   D0
  9.      BEQ.S   EDIT3        ;IF NO FILE NAME GIVEN
  10.      TST.B   EDFN(A6)
  11.      BEQ.S   EDIT1        ;IF NO FILE ALREADY SELECTED
  12.      LEA     EDITC(PC),A3    
  13.      BSR     RWB
  14.      BRA.S     EDIT3
  15.  
  16. EDIT1     BSR     VALF        ;GET VALIDATE FILE NAME
  17.      BGT.S     EDIT2        ;IF FILE NAME OK
  18. EDITX     RTS
  19.  
  20. EDIT2     BSR     OEF        ;OPEN/LOAD FILE
  21.  
  22. *
  23.  
  24. EDIT3    CLR.B   ENDE(A6)
  25.      MOVE.L  EDTE(A6),-(SP)
  26.      _TEActivate
  27.      MOVE.L  EDITF(A6),A1
  28.      TST.B   EDAF(A6)
  29.      BEQ.S   EDIT4        ;IF NO FILE SELECTED
  30.      BSR     LEF        ;LOAD EDIT FILE
  31. EDIT4    MOVE.L  #$0000FFFF,D0
  32.      _FlushEvents
  33.  
  34. *
  35.  
  36. EDITS    _SystemTask        ;RUN DESKTOP
  37.      MOVE.L  EDTE(A6),-(SP)
  38.      _TEIdle
  39.      CLR.B   -(SP)
  40.      MOVE    #-1,-(SP)    ;CHECK ALL EVENTS
  41.      PEA     EVTR(A6)
  42.      _GetNextEvent
  43.      MOVE.B  (SP)+,D0
  44.      BEQ     EDITS        ;IF NO POSTED EVENTS
  45.      MOVE    WHAT(A6),D0    ;EVENT TYPE
  46.      ADD     D0,D0
  47.      MOVE    EDITA(PC,D0),D0
  48.      BEQ     EDITS        ;IF PROCESSING NOT REQUIRED
  49.      JSR     EDITA(PC,D0)    ;PROCESS EVENT
  50.      TST.B   ENDE(A6)
  51.      BEQ     EDITS
  52.      RTS            ;RETURN TO CALLER
  53.  
  54. EDITA    DC     0        ;NULL EVENT
  55.      DC     EDMD-EDITA     ;MOUSE-DOWN
  56.      DC     0
  57.      DC     EDKD-EDITA     ;KEY-DOWN
  58.      DC     0
  59.      DC     EDKD-EDITA     ;AUTO-KEY
  60.      DC     0
  61.      DC     0
  62.      DC     0
  63.      DC     0
  64.      DC     0
  65.      DC     0
  66.      DC     0
  67.      DC     0
  68.      DC     0
  69.      DC     0
  70.  
  71. EDKD     MOVE    MODFS(A6),D0
  72.      BTST    #8,D0
  73.      BNE.S   EDKD1        ;IF COMMAND KEY DOWN
  74.      MOVE.L     EDTE(A6),A3
  75.      MOVE     teLength(A3),D0
  76.      CMP     #31500,D0
  77.      BLT     EDKD0        ;IF MEMORY NOT FULL
  78.      LEA     LEFA(PC),A3
  79.      BSR     RWB        ;*FILE TOO LARGE*
  80.      RTS
  81.  
  82. EDKD0     MOVE.L  MESSAGE(A6),D0
  83.      MOVE    D0,-(SP)
  84.      MOVE.L  EDTE(A6),-(SP)
  85.      _TEKey            ;PROCESS KEY
  86.      RTS
  87.  
  88. EDKD1    CLR.L   -(SP)        ;PROCESS COMMAND KEY
  89.      MOVE.L  MESSAGE(A6),D0
  90.      MOVE    D0,-(SP)
  91.      _MenuKey        ;LOOK UP POSSIBLE MENU COMMAND
  92.      MOVE.L  (SP)+,D0
  93.      BRA     EDMNCALL    ;PROCESS AS MENU SELECTION
  94.  
  95. *
  96.  
  97. EDMD     CLR     -(SP)        ;LOCATE MOUSE
  98.      MOVE.L  WHERE(A6),-(SP)
  99.      PEA     SCRS(A6)
  100.      _FindWindow
  101.      MOVE.L  SCRS(A6),D3    ;WINDOW FOR MOUSE DOWN
  102.      MOVE    (SP)+,D0    ;PART OF WINDOW CLICKED IN
  103.      ADD     D0,D0
  104.      MOVE    EDMDT(PC,D0),D1
  105.      JSR     EDMDT(PC,D1)    ;PROCESS MOUSE DOWN
  106. EDMDX    RTS
  107.  
  108. EDMDT    DC     EDMDX-EDMDT    ;NONE OF THE FOLLOWING
  109.      DC     EDMN-EDMDT    ;MENU BAR
  110.      DC     EDSW-EDMDT    ;SYSTEM WINDOW
  111.      DC     EDCN-EDMDT    ;CONTENT REGION
  112.      DC     EDMDX-EDMDT    ;DRAG REGION
  113.      DC     EDMDX-EDMDT    ;GROW REGION
  114.      DC     EDGW-EDMDT    ;GO AWAY REGION
  115.  
  116. EDCN     CMP.L   EDWN(A6),D3
  117.      BEQ.S   EDCN1        ;IF IN EDIT WINDOW
  118.      MOVE    #4,-(SP)
  119.      _SysBeep        ;SOUND WARNING
  120.      RTS            ;NO FURTHER PROCESSING
  121.  
  122. EDCN1    PEA     WHERE(A6)
  123.      _GlobalToLocal        ;CONVERT TO EDIT COORDINATES
  124.      CLR.B   -(SP)
  125.      MOVE.L  WHERE(A6),-(SP)
  126.      PEA     EWND(PC)    ;VIEW RECT
  127.      _PtInRect
  128.      MOVE.B  (SP)+,D0
  129.      BNE.S   EDCN2        ;IF IN TEXT AREA
  130.      CLR     -(SP)
  131.      MOVE.L  WHERE(A6),-(SP)
  132.      MOVE.L  EDWN(A6),-(SP)
  133.      PEA     CTRL(A6)
  134.      _FindControl
  135.      MOVE    (SP)+,D7
  136.      BNE     EDSB        ;IF SCROLL REQUEST
  137. EDCN2    MOVE.L  WHERE(A6),-(SP)
  138.      MOVE    MODFS(A6),D0
  139.      MOVEQ   #1,D2
  140.      BTST    #9,D0
  141.      BNE.S   EDCN3        ;IF SHIFT KEY DOWN
  142.      MOVEQ   #0,D2
  143. EDCN3    MOVE.B  D2,-(SP)
  144.      MOVE.L  EDTE(A6),-(SP)
  145.      _TEClick
  146.      RTS
  147.  
  148. *
  149.  
  150. EDSW     PEA     EVTR(A6)    ;EVENT RECORD
  151.      MOVE.L  D3,-(SP)
  152.      _SystemClick        ;PROCESS CLICK IN SYSTEM WINDOW
  153.      RTS
  154.  
  155. *
  156.  
  157. EDGW     CLR.B   -(SP)
  158.      MOVE.L  D3,-(SP)
  159.      MOVE.L  WHERE(A6),-(SP)
  160.      _TrackGoAway        ;HIGHLIGHT GOAWAY REGION
  161.      MOVE.B  (SP)+,D0
  162.      BEQ.S     EDGW1        ;IF GOAWAY NOT REQUESTED
  163.      BSR     CLOF
  164.      ST     ENDE(A6)    ;RETURN TO SHELL
  165. EDGW1     RTS
  166.  
  167. *        EDIT MENU PROCESSING.
  168.  
  169. EDMN     CLR.L   -(SP)
  170.      MOVE.L  WHERE(A6),-(SP)
  171.      _MenuSelect        ;TRACK MOUSE AND HIGHLIGHT SELECTION
  172.      MOVE.L  (SP)+,D0
  173. EDMNCALL LEA     MNUM(A6),A0
  174.      MOVE.L  D0,(A0)
  175.      MOVE    D0,D1        ;MENU LINE NUMBER
  176.      MOVE    D0,D7
  177.      ADD     D1,D1
  178.      SWAP    D0
  179.      ADD     D0,D0        ;MENU COLUMN NUMBER
  180.      MOVE    EDMNT(PC,D0),D0
  181.      BEQ.S   EDMNX
  182.      JSR     EDMNT(PC,D0)
  183. EDMNX    CLR     -(SP)
  184.      _HiLiteMenu        ;REMOVE MENU HIGHLIGHTING
  185.      RTS
  186. EDMNT    DC     0        ;MOUSE DOWN OUTSIDE OF MENU
  187.      DC     0        ;MENU COLUMN 1
  188.      DC     EMN2-EDMNT     ;FILE
  189.      DC     EMN3-EDMNT     ;EDIT
  190.      DC     EMN4-EDMNT     ;TRANSFER
  191.      DC     EMN5-EDMNT     ;SIZE
  192.  
  193. *        *FILE*.
  194.  
  195. EMN2     MOVE    EMN2T(PC,D1),D0
  196.      BEQ.S   EMN2X        ;IF NO PROCESSING
  197.      JSR     EMN2T(PC,D0)
  198. EMN2X    RTS
  199.  
  200. EMN2T    DC     0
  201.      DC     EMN21-EMN2T    ;NEW
  202.      DC     EMN22-EMN2T    ;OPEN
  203.      DC     EMN23-EMN2T    ;CLOSE
  204.      DC     EMN24-EMN2T    ;SAVE
  205.      DC     EMN24-EMN2T    ;SAVE AS
  206.      DC     EMN25-EMN2T    ;MERGE
  207.      DC     EMN26-EMN2T    ;PRINT
  208.      DC     EMN27-EMN2T    ;QUIT
  209.  
  210. EMN2W     BSR     RWB        ;RUN WARNING BOX
  211. EMN2Y     BSR     EDUPD        ;REDRAW SCREEN
  212.      RTS
  213.  
  214. EMN21     LEA     EDITH(PC),A3    ;ASK *FOR SURE ?*
  215.      BSR     RYN
  216.      BEQ     EMN2Y
  217.      BSR     CLOF2        ;ERASE TEXT IN MEMORY
  218.      RTS
  219.  
  220. EMN22     LEA     EDITC(PC),A3
  221.      TST.B     EDFN(A6)
  222.      BNE     EMN2W        ;IF FILE ALREADY OPEN
  223.      BSR     GETF        ;GET FILE NAME
  224.      BEQ     EMN2Y        ;IF NO NAME SELECTED
  225.      BSR     OEF        ;OPEN/LOAD EDIT FILE
  226.      TST.B     EDAF(A6)
  227.      BEQ     EMN2Y        ;IF NO FILE
  228.      BSR     LEF        ;LOAD EDIT FILE
  229.      RTS
  230.  
  231. EMN23     BSR     CLOF        ;CLOSE FILE
  232.      RTS
  233.  
  234. EMN24     LEA     EDITE(PC),A3    ;*FILE NOT OPEN*
  235.      TST.B     EDFN(A6)
  236.      BEQ     EMN2W        ;IF FILE NOT ALREADY OPEN
  237.      BSR     GETS        ;GET SAVE FILE NAME
  238.      BEQ     EMN2Y        ;IF NO NAME SELECTED
  239.      BSR     SEF        ;SAVE EDIT FILE
  240.      BRA     EMN2Y        ;REDRAW SCREEN
  241.  
  242. EMN25     BSR     GETF        ;GET MERGE FILE NAME
  243.      BEQ.S     EMN25X        ;IF NO NAME SELECTED
  244.      BSR     OEF        ;OPEN/LOAD MERGE FILE
  245.      TST.B     EDAF(A6)
  246.      BEQ.S     EMN25X        ;IF NO FILE
  247.      BSR     MEF        ;LOAD EDIT FILE
  248. EMN25X     BSR     EDUPD        ;REDRAW SCREEN
  249.      RTS
  250.  
  251. EMN26    BSR     PREF        ;PRINT EDIT FILE
  252.      RTS
  253.  
  254. EMN27    ST      ENDE(A6)
  255.      RTS
  256.  
  257. *        *EDIT*.
  258.  
  259. EMN3     MOVE    EMN3T(PC,D1),D0
  260.      BEQ.S   EMN3X       ;IF NO PROCESSING
  261.      MOVE.L  EDTE(A6),A3
  262.      JSR     EMN3T(PC,D0)
  263. EMN3X    RTS
  264. EMN3T    DC     0
  265.      DC     EMN31-EMN3T    ;CUT
  266.      DC     EMN32-EMN3T    ;COPY
  267.      DC     EMN33-EMN3T    ;PASTE
  268.      DC     EMN34-EMN3T    ;DELETE
  269.      DC     0
  270.      DC     0
  271.  
  272. EMN31    MOVE.L  A3,-(SP)
  273.      _TECut
  274.      RTS
  275. EMN32    MOVE.L  A3,-(SP)
  276.      _TECopy
  277.      RTS
  278. EMN33    MOVE.L  A3,-(SP)
  279.      _TEPaste
  280.      RTS
  281. EMN34    MOVE.L  A3,-(SP)
  282.      _TEDelete
  283.      RTS
  284. EMN35
  285.      RTS
  286.  
  287. *        *Transfer*.
  288.  
  289. EMN4     MOVE    EMN4T(PC,D1),D0
  290.      BEQ.S   EMN4X
  291.      JSR     EMN4T(PC,D0)    ;PROCESS SELECTION
  292. EMN4X    RTS
  293. EMN4T    DC     0
  294.      DC     EMN41-EMN4T    ;RETURN TO SHELL
  295.      DC     0
  296.  
  297. EMN41    ST      ENDE(A6)
  298.      RTS
  299. EMN42
  300.      RTS
  301.  
  302. *        *Style*.
  303.  
  304. EMN5     MOVE    EMN5T(PC,D1),D6
  305.      BEQ.S   EMN5X
  306.      CLR.L   -(SP)       ;GET MENU HANDLE
  307.      MOVE    #5,-(SP)
  308.      _GetMHandle
  309.      MOVE.L  (SP)+,A4
  310.      MOVE.L  EDTE(A6),A3
  311.      MOVE.L  (A3),A3
  312.      JSR     EMN5T(PC,D6)
  313. EMN5X    RTS
  314. EMN5T    DC     0
  315.      DC     EMN51-EMN5T    ;9 POINT
  316.      DC     EMN52-EMN5T    ;12 POINT
  317.      DC     0
  318.  
  319. EMN51    MOVE    #9,txSize(A3)
  320.      MOVE    #9,teAscent(A3)
  321.      MOVE    #9+3,teLineHite
  322.      BSR     EDUPD        ;REDRAW SCREEN
  323. EMN51.1  MOVE.L  A4,-(SP)    ;MENU HANDLE
  324.      MOVE    #1,-(SP)    ;MENU ITEM
  325.      MOVE    D7,ESTY(A6)
  326.      MOVE    D7,D6
  327.      SUB     #2,D6
  328.      MOVE.B  D6,-(SP)
  329.      _CheckItem        ;SET/CLEAR CHECK
  330.      MOVE.L  A4,-(SP)
  331.      MOVE    #2,-(SP)
  332.      SUB     #1,D7
  333.      MOVE.B  D7,-(SP)
  334.      _CheckItem        ;SET/CLEAR CHECK
  335.      RTS
  336.  
  337. EMN52    MOVE    #12,txSize(A3)
  338.      MOVE    #12,teAscent(A3)
  339.      MOVE    #12+4,teLinehite(A3)
  340.      BSR     EDUPD
  341.      BRA     EMN51.1
  342.  
  343. *        EDUPD - REDRAW EDIT SCREEN.
  344.  
  345. EDUPD    MOVE.L  EDWN(A6),-(SP)
  346.      _BeginUpdate
  347.      PEA     EWND(PC)
  348.      _InvalRect
  349.      PEA     EWND(PC)        ;VIEW RECTANGLE
  350.      MOVE.L  EDTE(A6),-(SP)
  351.      _TEUpdate
  352.      MOVE.L  EDWN(A6),-(SP)
  353.      _EndUpdate
  354.      RTS
  355. SCROLL     SPACE     4,10
  356. **       PROCESS SCROLL REQUESTS.
  357. *
  358. *        ENTRY   D7 - CONTROL PART.
  359.  
  360. EDSB     MOVE.L  CTRL(A6),A3    ;CONTROL HANDLE
  361.      MOVE.L  EDTE(A6),A4    ;GET TE RECORD
  362.      LEA     SCRLA(PC),A2
  363.      MOVE.L  A4,(A2)
  364.      MOVE.L  (A4),A4
  365.      MOVE.L  A3,-(SP)
  366.      MOVE    teNLines(A4),D5  ;NUMBER OF EDIT LINES
  367.      BEQ.S     EDSB0
  368.      SUBQ     #1,D5
  369. EDSB0     ADDQ    #1,D5
  370.      MOVE    D5,-(SP)
  371.      _SetMaxCtl
  372.      MOVE    teLineHite(A4),D6
  373.      MOVEQ   #0,D4        ;COMPUTE LINES IN WINDOW
  374.      MOVE    teViewRect+W+W(A4),D4
  375.      SUB     teViewRect(A4),D4
  376.      DIVU    D6,D4
  377.      LEA     EDSBT(PC),A0
  378.      MOVE.L  A0,A2
  379. EDSB1    MOVE    (A2)+,D1    ;PART TYPE
  380.      BEQ.S   EDSBX        ;IF NO PROCESSING REQUIRED
  381.      MOVE    (A2)+,D2
  382.      CMP     D1,D7
  383.      BNE     EDSB1        ;IF NO PART MATCH
  384.      LEA     TOTH(A6),A2
  385.      JSR     0(A0,D2)
  386. EDSBX    RTS
  387.  
  388. EDSBT    DC     20,EDOW-EDSBT   ;UP ARROW
  389.      DC     21,EDUP-EDSBT   ;DOWN ARROW
  390.      DC     22,EDPU-EDSBT   ;PAGE UP
  391.      DC     23,EDPD-EDSBT   ;PAGE DOWN
  392.      DC     129,EDTM-EDSBT  ;THUMB
  393.      DC     0
  394.  
  395. *        SCROLL PAGE UP/DOWN.
  396.  
  397. EDPD     MOVE    D4,D3
  398.      BSR     SCROLL        ;SCROLL PAGE
  399.      RTS
  400. EDPU     NEG     D4        ;OPPOSITE DIRECTION
  401.      BRA     EDPD
  402.  
  403. *        SCROLL LINE UP.
  404.  
  405. EDUP     CLR     -(SP)
  406.      MOVE.L  A3,-(SP)    ;CONTROL HANDLE
  407.      MOVE.L  WHERE(A6),-(SP) ;CLICK LOCATION
  408.      PEA     EDUP1(PC)    ;SCROLL LINE UP
  409.      _TrackControl
  410.      MOVE    (SP)+,D0
  411.      MOVE.L  A3,-(SP)    ;DEACTIVATE ACTION PROC
  412.      CLR.L   -(SP)
  413.      _SetCtlAction
  414.      RTS
  415. EDUP1    MOVE.L  (SP)+,A0    ;RETURN ADDRESS
  416.      MOVE    (SP)+,D0    ;PART NUMBER
  417.      MOVE.L  (SP)+,A3    ;CONTROL HANDLE
  418.      MOVE.L  A0,-(SP)
  419.      MOVEQ   #1,D3        ;SCROLL UP
  420.      BSR     SCROLL
  421.      RTS
  422.  
  423. *        SCROLL LINE DOWN.
  424.  
  425. EDOW     CLR     -(SP)
  426.      MOVE.L  A3,-(SP)     ;CONTROL HANDLE
  427.      MOVE.L  WHERE(A6),-(SP) ;CLICK LOCATION
  428.      PEA     EDOW1(PC)       ;SCROLL LINE UP
  429.      _TrackControl
  430.      MOVE    (SP)+,D0
  431.      MOVE.L  A3,-(SP)
  432.      CLR.L   -(SP)
  433.      _SetCtlAction         ;DEACTIVATE ACTION PROC
  434.      RTS
  435. EDOW1    MOVE.L  (SP)+,A0
  436.      MOVE    (SP)+,D0        ;PART NUMBER
  437.      MOVE.L  (SP)+,A3        ;CONTROL HANDLE
  438.      MOVE.L  A0,-(SP)
  439.      MOVEQ   #-1,D3         ;SCROLL DOWN
  440.      BSR.S   SCROLL
  441.      RTS
  442.  
  443. *        THUMB REGION.
  444.  
  445. EDTM     CLR     -(SP)          ;GET CURRENT POSITION
  446.      MOVE.L  A3,-(SP)
  447.      _GetCtlValue
  448.      MOVE    (SP)+,D3
  449.      CLR     -(SP)         ;TRACK THUMB MOVEMENT
  450.      MOVE.L  A3,-(SP)
  451.      MOVE.L  WHERE(A6),-(SP)
  452.      CLR.L   -(SP)
  453.      _TrackControl
  454.      MOVE    (SP)+,D0
  455.      CMP     D0,D7
  456.      BNE.S   EDTM1         ;IF EXITED FROM THUMB
  457.      CLR     -(SP)
  458.      MOVE.L  A3,-(SP)
  459.      _GetCtlValue          ;GET NEW THUMB VALUE
  460.      MOVE    D3,D0
  461.      MOVE    (SP)+,D3
  462.      SUB     D0,D3
  463.      BSR.S   SCROLL1
  464.      BNE.S   EDTM1         ;IF SCROLL TOOK PLACE
  465.      MOVE.L  A3,-(SP)
  466.      MOVE    D0,-(SP)        ;RESTORE ORIGINAL VALUE
  467.      _SetCtlValue
  468. EDTM1    RTS
  469.  
  470. *
  471.  
  472. SCROLL   CLR     -(SP)        ;GET CURRENT VALUE
  473.      MOVE.L  A3,-(SP)
  474.      _GetCtlValue
  475.      MOVE    (SP)+,D0
  476. SCROLL1  MOVE    D0,D1
  477.      TST     D3
  478.      BLT.S   SCRL2        ;IF BACKWARD MOVEMENT
  479.      ADD     D3,D1
  480.      CMP     D5,D1
  481.      BLE.S   SCRL1        ;IF NOT AT END OF TEXT
  482.      MOVE    D5,D1
  483. SCRL1    MOVE    D5,D2
  484.      SUB     D0,D2        ;LINES LEFT TO DISPLAY
  485.      CMP     D4,D2
  486.      BGE.S   SCRL5        ;IF MORE THAN ONE SCREEN FULL
  487.      CLR     D3
  488.      BRA.S   SCRLX
  489. SCRL2    ADD     D3,D1
  490.      BGT.S   SCRL3        ;IF NOT NOW AT 1ST LINE
  491.      CLR     D1
  492.      MOVE    (A2),D3    ;POSITION TO 1ST LINE
  493.      NEG     D3
  494.      BRA.S   SCRL5
  495. SCRL3    TST     (A2)
  496.      BEQ.S   SCRLX        ;DONT SCROLL PAST 1ST LINE
  497. SCRL5    MOVE.L  A3,-(SP)
  498.      ADD     D3,(A2)
  499.      MULS    D6,D3
  500.      MOVE    D1,-(SP)
  501.      _SetCtlValue         ;SET NEW VALUE
  502.      MOVE    #0,-(SP)
  503.      NEG     D3
  504.      MOVE    D3,-(SP)
  505.      MOVE.L  SCRLA(PC),-(SP)
  506.      _TEScroll
  507.      MOVEQ   #1,D3        ;SET SCROLL FLAG
  508. SCRLX    RTS
  509.  
  510. SCRLA    DS.L     1        ;TE HANDLE
  511. EDITS     TITLE     CYCLAN TEXT EDITOR SUBROUTINES.
  512. CLOF     SPACE     4,10
  513. **       CLOF - CLOSE EDIT FILE.
  514. *     EXIT     CCR .NE. 0 IF ERROR ON CLOSE.
  515.  
  516. CLOF     MOVE.L  EDTE(A6),A0
  517.      MOVE.L  (A0),A3    ;TE RECORD
  518.      CLR.L   D4
  519.      MOVE    TELENGTH(A3),D4 ;TEXT LENGTH
  520.      TST.B   EDFN(A6)
  521.      BEQ.S   CLOFX        ;IF NO FILE SELECTED
  522.      LEA     INFT(PC),A2
  523.      MOVE.L  #'TEXT',(A2)    ;'TEXT'
  524.      MOVE.L  EDITF(A6),A1
  525.      BSR     OBFW        ;OPEN FOR WRITE
  526.      MOVE.L  teTextH(A3),A0 ;TEXT HANDLE
  527.      MOVE.L  (A0),A0
  528.      MOVE.L  D4,D0
  529.      JSR     IOWRITEB(PC)    ;WRITE FILE
  530.      BNE.S   CLOFER
  531.      JSR     IOCLS(PC)    ;CLOSE FILE
  532.      BNE.S   CLOFER        ;IF ERROR
  533.      LEA     DEFVOL(A6),A0
  534.      LEA     VOLNAM(A6),A4
  535.      CLR.L     (A4)
  536.      MOVE.L     A4,ioFileName(A0)
  537.      MOVE     FFPB+ioVRefNum(A1),ioVRefNum(A0)
  538.      CLR     ioVolIndex(A0)
  539.      _GetVolInfo
  540.      _FlushVol        ;ENSURE ALL DATA IS ON THE DISK
  541.  
  542. CLOF2     CLR.B   EDFN(A6)    ;ERASE TEXT RECORD
  543.      MOVE.L  EDTE(A6),A0
  544.      MOVE.L  (A0),A3    ;TE RECORD
  545.      CLR     teSelStart(A3)
  546.      MOVE    teLength(A3),teSelEnd(A3)
  547.      MOVE.L  A0,-(SP)
  548.      _TEDelete        ;RELEASE TEXT
  549.      CLR     teSelEnd(A3)
  550.      MOVE.L  VBAR(A6),-(SP) ;RESET VERTICAL SCROLL BAR
  551.      CLR     -(SP)
  552.      _SetCtlValue
  553.      MOVE.L     EDWN(A6),-(SP)
  554.      PEA     EWNB(PC)    ;RESET WINDOW TITLE
  555.      _SetWTitle
  556. CLOFX    CLR     D0
  557.      RTS
  558.     
  559. CLOFER     LEA     EDITG(PC),A3    ;*UNABLE TO WRITE FILE*
  560.      BSR     IFN        ;BUILD ERROR MESSAGE
  561.      BSR     IFE
  562.      BSR     RWB
  563.      BRA.S     CLOFX
  564. EMENU     SPACE     4,10
  565. **     EMENU - SET UP EDIT WINDOW MENU LINE.
  566.  
  567. EMENU    CLR.L   -(SP)
  568.      MOVE    #1,-(SP)    ;1ST MENU COLUMN
  569.      PEA     EDM1(PC)
  570.      _NewMenu
  571.      MOVE.L  (SP),MN1H(A6)    ;COLUMN 1 HANDLE
  572.      MOVE.L  (SP),-(SP)
  573.      PEA     EDM11(PC)
  574.      _AppendMenu
  575.      CLR     -(SP)
  576.      _InsertMenu
  577.      CLR.L   -(SP)
  578.      MOVE    #2,-(SP)    ;2ND MENU COLUMN
  579.      PEA     EDM2(PC)
  580.      _NewMenu
  581.      MOVE.L  (SP),MN2H(A6)
  582.      MOVE.L  (SP),-(SP)
  583.      PEA     EDM21(PC)
  584.      _AppendMenu
  585.      CLR     -(SP)
  586.      _InsertMenu
  587.      CLR.L   -(SP)
  588.      MOVE    #3,-(SP)    ;3RD MENU COLUMN
  589.      PEA     EDM3(PC)
  590.      _NewMenu
  591.      MOVE.L  (SP),MN3H(A6)
  592.      MOVE.L  (SP),-(SP)
  593.      PEA     EDM31(PC)
  594.      _AppendMenu
  595.      CLR     -(SP)
  596.      _InsertMenu
  597.      CLR.L   -(SP)
  598.      MOVE    #4,-(SP)
  599.      PEA     EDM4(PC)
  600.      _NewMenu
  601.      MOVE.L  (SP),-(SP)
  602.      PEA     EDM41(PC)
  603.      _AppendMenu
  604.      CLR     -(SP)
  605.      _InsertMenu
  606.      CLR.L   -(SP)
  607.      MOVE    #5,-(SP)
  608.      PEA     EDM5(PC)    ;* SIZE *
  609.      _NewMenu
  610.      MOVE.L  (SP),-(SP)
  611.      MOVE.L  (SP),A4
  612.      PEA     EDM51(PC)
  613.      _AppendMenu
  614.      CLR     -(SP)
  615.      _InsertMenu
  616.      MOVE    ESTY(A6),D7    ;SET CHECK MARK FOR SELECTED SIZE
  617.      BSR     EMN51.1
  618.      _DrawMenuBar        ;DRAW NEW MENU BAR
  619.      RTS
  620.  
  621. *        EDIT MENU ENTRIES.
  622.  
  623. EDM1     DC     $0114        ;APPLE SYMBOL
  624. EDM11    STR     ('Edit;by;J. R. Hogue')
  625. EDM2     STR     ('File')
  626. EDM21    STR     ('New;Open...;Close;Save...;Save As...;Merge...;Print;Quit/Q')
  627. EDM3     STR     ('Edit')
  628. EDM31    STR     ('Cut/X;Copy/C;Paste/V;Delete/D')
  629. EDM4     STR     ('Transfer')
  630. EDM41    STR     ('Shell')
  631. EDM5     STR     ('Size')
  632. EDM51    STR     ('  9 POINT; 12 POINT')
  633. EWIND     SPACE     4,10
  634. **     EWIND - INITIALIZE EDIT WINDOW.
  635. *
  636.  
  637. EWIND    CLR.L   -(SP)
  638.      PEA     TEWR(A6)    ;EDIT WINDOW RECORD
  639.      PEA     EWNA(PC)    ;SIZE
  640.      PEA     EWNB(PC)    ;TITLE
  641.      MOVE.B  #1,-(SP)    ;VISIBLE
  642.      MOVE    #4,-(SP)    ;NO GROW DOCUMENT WINDOW
  643.      MOVE.L  #-1,-(SP)    ;ON TOP
  644.      MOVE.B  #1,-(SP)    ;ALLOW GO AWAY
  645.      CLR.L   -(SP)
  646.      _NEWWINDOW
  647.      MOVE.L  (SP),EDWN(A6)    ;EDIT WINDOW HANDLE
  648.      _SETPORT
  649.      MOVE    #4,-(SP)    ;USE MONACO FONT
  650.      _TEXTFONT
  651.      MOVE    #2,ESTY(A6)    ;SET SIZE MENU INDEX
  652.      MOVE    #12,-(SP)    ;SIZE
  653.      _TEXTSIZE
  654.      MOVE    #0,-(SP)
  655.      _TEXTFACE
  656.      MOVE    #0,-(SP)        ;OVERWRITE
  657.      _TEXTMODE
  658.  
  659. *     ADD SCROLL BARS.
  660.  
  661.      CLR.L   -(SP)
  662.      MOVE.L  EDWN(A6),-(SP)
  663.      PEA     EWNE(PC)        ;VERTCAL RECT SCROLL AREA
  664.      CLR.L   -(SP)
  665.      MOVE.B  #1,-(SP)        ;VISIBLE
  666.      MOVE    #0,-(SP)        ;INITIAL VALUE
  667.      MOVE    #0,-(SP)        ;MIN
  668.      MOVE    #1,-(SP)        ;MAX
  669.      MOVE    #16,-(SP)       ;SCROLL BAR
  670.      CLR.L   -(SP)
  671.      _NewControl
  672.      MOVE.L  (SP)+,D0
  673.      MOVE.L  D0,VBAR(A6)
  674.  
  675.  
  676. *     CREATE TE RECORD.
  677.  
  678. EWNTE     CLR.L   -(SP)
  679.      PEA     EWNC(PC)    ;EDIT DESTINATION RECTANGLE
  680.      PEA     EWND(PC)    ;VIEW RECTANGLE
  681.      _TENEW
  682.      MOVE.L  (SP)+,A3
  683.      MOVE.L  A3,EDTE(A6)    ;EDIT TE HANDLE
  684.      MOVE.L  (A3),A3
  685.      MOVE    #-1,teCROnly(A3)  ;NEW LINE ON CR
  686.  
  687.      RTS
  688.  
  689. EWNA     DC     38,01,338,510
  690. EWNB     STR     'EDITOR'
  691. EWNC     DC     4,4,64400,644       ;DESTINATION RECTANGLE
  692. EWND     DC     4,4,284+15,494       ;EDITOR  VIEW RECTANGLE
  693. EWNE     DC     0,494,285+15,509  ;V SCROLL
  694. EWNF     DC     285,0,300,509       ;H SCROLL
  695. LEF     SPACE     4,10
  696. **       LEF - LOAD FILE INTO EDIT RECORD.
  697.  
  698. LEF     MOVE.L  A1,FILA(A6)    ;SAVE FIT ADDRESS
  699.      MOVEQ     #$09,D3    ;TAB
  700.      MOVEQ   #$0D,D4    ;C/R
  701.      MOVEQ   #$0A,D5    ;L/F
  702.      MOVEQ   #' ',D6
  703.      MOVEQ   #127,D7
  704.      MOVE.L     TMEM(A6),A4    ;SET UP SCRATCH READ BUFFER IN MAC.68K AREA
  705.      SUB     #32500,A4
  706.      MOVE.L     A4,-(SP)
  707.      MOVE.L     A4,A3        ;START OF NEW LINE
  708. LEF2     MOVE.L     A4,A2
  709.      SUB.L   (SP),A2
  710.      CMP     #31500,A2
  711.      BLE.S     LEF2.2        ;IF FILE NOT TOO LARGE
  712.      LEA     LEFA(PC),A3
  713.      BSR     RWB        ;*FILE TRUNCATED*
  714.      BRA.S     LEFX
  715.  
  716. LEF2.2     JSR     IOREADO(PC)    ;READ ONE BYTE
  717.      BEQ.S   LEFX        ;IF END OF FILE
  718.      CMP.B   D6,D0
  719.      BLT.S   LEF4        ;IF CONTROL CHARACTER
  720. LEF3     MOVE.B  D0,(A4)+
  721.      BRA     LEF2
  722.  
  723. LEF4     CMP.B   D4,D0
  724.      BEQ.S   LEF5        ;IF END OF LINE
  725.      CMP.B   D5,D0
  726.      BEQ     LEF2        ;IGNORE LF
  727.      CMP.B   D3,D0
  728.      BEQ.S   LEF6        ;IF TAB
  729.      CMP.B   #$1A,D0
  730.      BEQ.S     LEFX        ;IF END OF FILE CHARACTER
  731.      BRA     LEF2        ;IGNORE ANYTHING ELSE
  732.  
  733. LEF5     MOVE.B     D0,(A4)+
  734.      MOVE.L     A4,A3        ;START OF NEW LINE
  735.      BRA     LEF2
  736.  
  737. LEF6     MOVE.L     A4,D0
  738.      SUB.L     A3,D0        ;CHARACTER POSITION
  739.      MOVE     D0,D1
  740.      AND     #$FFF8,D1
  741.      ADDQ     #8,D1
  742.      SUB     D0,D1
  743. LEF7     MOVE.B     D6,(A4)+    ;TAB OUT TO NEXT 8TH POSITION
  744.      SUBQ     #1,D1
  745.      BNE     LEF7
  746.      BRA     LEF2
  747.  
  748. LEFX     MOVE.L     (SP)+,A2
  749.      SUB.L     A2,A4        ;SIZE OF EXPANDED FILE
  750.      _MaxMem
  751.      MOVE.L     A4,D7
  752.      MOVE.L     A4,D6        ;ACTUAL TEXT LENGTH
  753.      CMP.L     A0,D7
  754.      BGE.S     LEFER        ;IF NOT ENOUGH MEMORY
  755.      MOVE.L     EDTE(A6),-(SP)
  756.      _TEDispose        ;RELEASE CURRENT EDIT RECORD
  757.      _MaxMem
  758.      MOVE.L     D6,D0
  759.      ADD.L     #500,D0    ;ASK FOR ACTUAL TEXT SIZE + 500
  760.      _NewHandle
  761.      BNE.S     LEFER
  762.      MOVE.L     A0,A4
  763.      _HLock            ;LOCK TEXT BLOCK
  764.      MOVE.L     D6,D0
  765.      LSR     #2,D0
  766.      MOVE.L     (A0),A0
  767. LEFX2     MOVE.L     (A2)+,(A0)+
  768.      DBF     D0,LEFX2    ;TRANSFER TEXT TO HEAP BLOCK
  769.      MOVE.L     A4,A0
  770.      MOVE.L     D6,D0
  771.      _SetHandleSize        ;SET TO ACTUAL TEXT SIZE
  772.      BSR     EWNTE        ;SET UP TE RECORD
  773.      MOVE.L     teTextH(A3),A0
  774.      _DisposHandle        ;RELEASE NULL TEXT BLOCK
  775.      MOVE.L     A4,teTextH(A3)    ;TEXT HANDLE
  776.      MOVE     D6,teLength(A3)
  777.      MOVE.L     (A4),A3
  778.      MOVE.L     D6,D7
  779.      MOVE.L     EDTE(A6),-(SP)
  780.      _TECalText        ;BUILD TE LINE ARRAY
  781.      MOVE.L     FILA(A6),A1
  782.      MOVE.L     EDWN(A6),-(SP)
  783.      MOVE.L     FFPB+ioFileName(A1),-(SP)  ;USE FILE NAME FOR WINDOW TITLE
  784.      _SetWTitle
  785. LEFX3     MOVE.L     EDTE(A6),-(SP)
  786.      _TEActivate
  787.      BSR     EDUPD        ;PAINT SCREEN
  788.      MOVE.L     A4,A0
  789.      _HUnlock        
  790.      MOVE.L     FILA(A6),A1
  791.      JSR     IOCLS(PC)    ;CLOSE READ PATH
  792.      CLR.B   EDAF(A6)
  793.      RTS
  794.  
  795. LEFER     LEA     LEFB(PC),A3
  796.      BSR     RWB
  797.      BSR     EWNTE        ;SET UP TE RECORD
  798.      BRA     LEFX3
  799.  
  800. LEFA     DC.B     #Z*FILE LARGER THAN 31000 CHARACTERS*
  801. LEFB     DC.B     #Z*NOT ENOUGH MEMORY TO LOAD FILE*
  802. MEF     SPACE     4,10
  803. **       MEF - MERGE FILE INTO EDIT RECORD.
  804.  
  805. MEF      MOVE.L  A1,FILA(A6)    ;SAVE FIT ADDRESS
  806. MEF1     MOVE.L  FILA(A6),A1
  807.      LEA     SCRS(A6),A3
  808.      MOVE.L  A3,A4
  809.      MOVEQ     #$09,D3
  810.      MOVEQ   #$0D,D4
  811.      MOVEQ   #$0A,D5
  812.      MOVEQ   #' ',D6
  813.      MOVEQ   #127,D7
  814. MEF2     JSR     IOREADO(PC)    ;READ ON BYTE
  815.      BEQ.S   MEFX        ;IF END OF FILE
  816.      CMP.B   D6,D0
  817.      BLT.S   MEF4        ;IF CONTROL CHARACTER
  818.      MOVE.B  D0,(A4)+
  819.      DBF     D7,MEF2
  820. MEF3     SUB.L   A3,A4
  821.      MOVE.L  A3,-(SP)
  822.      MOVE.L  A4,-(SP)
  823.      MOVE.L  EDTE(A6),-(SP)
  824.      _TEInsert
  825.      MOVE    D4,-(SP)
  826.      MOVE.L  EDTE(A6),-(SP)
  827.      _TEKey            ;SET END OF LINE
  828.      MOVE.L     EDTE(A6),A3
  829.      MOVE     teLength(A3),D0
  830.      CMP     #31500,D0
  831.      BLT     MEF1        ;READ NEXT LINE
  832.      LEA     LEFA(PC),A3
  833.      BSR     RWB        ;*FILE TOO LARGE*
  834.      BRA     MEFX
  835.  
  836. MEF4     CMP.B   D4,D0
  837.      BEQ.S   MEF3        ;IF END OF LINE
  838.      CMP.B   D5,D0
  839.      BEQ     MEF2        ;IGNORE LF
  840.      CMP.B   D3,D0
  841.      BEQ.S   MEF6        ;IF TAB
  842.      CMP.B   #$1A,D0
  843.      BEQ.S     MEFX        ;IF END OF FILE CHARACTER
  844.      BRA     MEF2        ;IGNORE ANYTHING ELSE
  845.  
  846. MEF6     MOVE.L     A4,D0
  847.      SUB.L     A3,D0        ;CHARACTER POSITION
  848.      MOVE     D0,D1
  849.      AND     #$FFF8,D1
  850.      ADDQ     #8,D1
  851.      SUB     D0,D1
  852. MEF7     MOVE.B     D6,(A4)+    ;TAB OUT TO NEXT 8TH POSITION
  853.      SUBQ     #1,D1
  854.      BNE     MEF7
  855.      BRA     MEF2
  856.  
  857. MEFX     JSR     IOCLS(PC)    ;CLOSE READ PATH
  858.      CLR.B   EDAF(A6)
  859.      RTS
  860. OEF     SPACE     4,10
  861. **     OEF - OPEN/LOAD EDIT FILE.
  862.  
  863. OEF     BSR     OBF        ;OPEN FILE
  864.      BEQ.S   OEF1        ;IF OPENED
  865.      CMP     #FNFERR,D0
  866.      BNE.S   OEF2        ;IF FILE THERE BUT UNAVAILABLE
  867.      LEA     INFT(PC),A2
  868.      MOVE.L  #'TEXT',(A2)    ;'TEXT'
  869.      BSR     CREATF        ;CREATE FILE
  870.      BRA     OEF
  871.  
  872. OEF1     ST      EDAF(A6)    ;FILE LOAD REQUIRED
  873.      ST      EDFN(A6)    ;FILE SELECTED
  874.      RTS
  875.  
  876. OEF2     LEA     EDITD(PC),A3    ;*FILE UNAVAILABLE*
  877.      BSR     RWB
  878.      RTS
  879. PREF     SPACE     4,10
  880. **       PREF - PRINT EDIT FILE.
  881.  
  882. PREF     JSR     IOPROP(PC)    ;OPEN PRINT DRIVER
  883.      MOVE.L  EDTE(A6),A3
  884.      MOVE.L  (A3),A3
  885.      MOVE    teNLines(A3),D7  ;NUMBER OF LINES TO PRINT
  886.      SUBQ    #1,D7
  887.      BLT.S   PREFX        ;IF EMPTY FILE
  888.      LEA     teLines(A3),A4
  889.  
  890. *        PRINT ON LINE.
  891.  
  892. PREF1    MOVE.L  teTextH(A3),A1
  893.      MOVE.L  (A1),A1
  894.      CLR.L   D0
  895.      MOVE    (A4)+,D4        ;START OF LINE
  896.      MOVE    (A4),D0
  897.      ADD     D4,A1
  898.      SUB     D4,D0       ;NUMBER OF BYTES IN LINE
  899.      MOVE.L  A1,ioBuffer(A0)
  900.      MOVE.L  D0,ioByteCount(A0)
  901.      _Write
  902.      LEA     PREFA(PC),A1    ;ISSUE A LINE FEED
  903.      MOVE.L  A1,ioBuffer(A0)
  904.      MOVEQ   #1,D0
  905.      MOVE.L  D0,ioByteCount(A0)
  906.      _Write
  907.      DBF     D7,PREF1
  908. PREFX    RTS
  909.  
  910. PREFA    DC     $0A00
  911. SEF     SPACE     4,10
  912. **       SEF - SAVE EDIT FILE.
  913. *     EXIT     CCR .NE. 0 IF ERROR ON CLOSE.
  914.  
  915. SEF     MOVE.L  EDTE(A6),A0
  916.      MOVE.L  (A0),A3    ;TE RECORD
  917.      CLR.L   D4
  918.      MOVE    TELENGTH(A3),D4 ;TEXT LENGTH
  919.      MOVE.L  EDITT(A6),A1
  920.      LEA     INFT(PC),A2
  921.      MOVE.L  #'TEXT',(A2)    ;'TEXT'
  922.      BSR     OBFW        ;OPEN FOR WRITE
  923.  
  924.      MOVE.L  teTextH(A3),A0 ;TEXT HANDLE
  925.      MOVE.L  (A0),A0
  926.      MOVE.L  D4,D0
  927.      JSR     IOWRITEB(PC)    ;WRITE FILE
  928.      BNE.S   SEFER
  929.      JSR     IOCLS(PC)    ;CLOSE FILE
  930.      BNE.S   SEFER        ;IF ERROR
  931.      LEA     DEFVOL(A6),A0
  932.      LEA     VOLNAM(A6),A4
  933.      CLR.L     (A4)
  934.      MOVE.L     A4,ioFileName(A0)
  935.      MOVE.L     EDITT(A6),A1
  936.      MOVE     FFPB+ioVRefNum(A1),ioVRefNum(A0)  ;SET CURRENT VOLUME
  937.      CLR     ioVolIndex(A0)
  938.      _GetVolInfo
  939.      _FlushVol
  940.  
  941. SEF1     CLR     D0
  942.      RTS
  943.  
  944. SEFER     LEA     EDITG(PC),A3    ;*UNABLE TO WRITE FILE*
  945.      BSR     IFN
  946.      BSR     IFE        ;STUFF ERROR NUMBER
  947.      BSR     RWB
  948.      BRA     SEF1
  949.  
  950. *     EDITOR ERROR AND WARNING MESSAGES.
  951.  
  952. EDITC    DC     #Z*AN EDIT FILE IS ALREADY OPEN.*
  953. EDITD     DC     #Z*FILE UNAVAILABLE.*
  954. EDITE     DC     #Z*A FILE IS NOT CURRENTLY OPEN.*
  955. EDITG     DC     #Z*UNABLE TO WRITE FILE - .*
  956. EDITH     DC     #Z*ERASE CURRENT EDIT TEXT ?*
  957. EDITJ     DC     #Z*NO PATHS FOUND.*
  958.  
  959. *     END OF TEXT EDIT INCLUDE FILE.
  960.